#include <iostream>
using namespace std;
// 1号函数
void func(char ch)
{
    cout << "#1 " << ch << endl;
}
// 2号函数
#if 1
/* 去掉这个函数的时候，就会报错。func(s)和func(49)这两个函数发生调用错误，它们可以匹配三个重载函数中的任何一个，编译器不知道如何抉择。
    (1)func(s)、func(49)没有精确匹配的重载函数
    (2)将它们的类型都提升为 int 后仍然不能匹配，
    (3)接下来进入自动类型转换阶段，发现 s 被转换为 char（整型转换）、long（整型转换）、double（整数和小数转换）后都有比较合适的函数，而且它们在同一个优先级中，谁也不比谁优秀，调用哪个都一样，产生了二义性，所以编译器会报错。
*/
void func(int n)
{
    cout << "#2 " << n << endl;
}
#endif
// 3号函数
void func(long m)
{
    cout << "#3 " << m << endl;
}
// 4号函数
void func(double f)
{
    cout << "#4 " << f << endl;
}
int main()
{
    short s = 99;
    float f = 84.6;

    func('a'); //不需要类型转换，调用func(char)
    func(s);   //将short转换成int，调用func(int)
    func(49);  //不需要类型转换，调用func(int)
    func(f);   //将float转换成double，调用func(double)
    return 0;
}
